<?php
class Delivery_Model_DbTable_PromocionesPedidos
	extends Delivery_Model_DbTable_Abstract

{
	protected $_name = 'pedido_promociones';
	protected $_primary = array('idPedido', 'idPromocion');
	
	public function guardar( $promocion ){
		
//		if ( $this->getById($promocion->idPromocion, $promocion->idPedido)){
//			return;
//		}
		
		$data = array (
			'idPedido'	=> $promocion->idPedido,
   			'idPromocion'=> $promocion->idPromocion,
   			'cantidad'	=> $promocion->cantidad,
   			'productos'	=> implode(",", array_keys($promocion->productos)),
   			'cantidades'=> implode(",", $promocion->productos)
   		);	
		
		return parent::insert($data);
	}
	
	
	public function getByPedido( $idPedido ){
		
		
		// usar siempre asi cuando hay un join
		$select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
		 			->setIntegrityCheck(false)
		 					
		             ->join('promociones',
		             		'promociones.idPromocion = pedido_promociones.idPromocion');

		if ( is_int($idPedido)){
			$select->where('pedido_promociones.idPedido = ?', $idPedido, Zend_Db::INT_TYPE);
		} else {
			$select->where('pedido_promociones.idPedido IN (?)', $idPedido, Zend_Db::INT_TYPE);
		}		             

		return $this->_fetchAll($select);
	}
	
	public function getById( $idPromocion, $idPedido = null){

		$select = $this->select()->where('idPromocion = ?', $idPromocion, Zend_Db::INT_TYPE );
		
		if ( $idPedido ){
			$select->where('idPedido = ?', $idPedido, Zend_Db::INT_TYPE );
		}	
		
		return $this->_fetch( $select );
	}
	
	public function hasProduct( $idProducto ){

		$select = $this->select()
						->from($this, array('idPromocion'))
						->where("productos  REGEXP '^?$|^?,|,?,|,?$'", $idProducto, Zend_Db::INT_TYPE )
						->limit(1);
		
		$result = $this->getAdapter()->fetchRow( $select );
		return ! empty( $result );
		
	}
	
	
//	SELECT 1 FROM test.regex r WHERE name REGEXP '^85$|^85,|,85,|,85$' LIMIT 1
	
	protected function _fetch( $select )
	{
		$row = $this->_db->fetchRow( $select );
		
		if ( ! empty( $row ) && empty( $row['productos'] ) ){	
		
			$row = $this->_decodeProductos( $row );
		
		}
		return $row;
	}
	
	protected function _fetchAll( $select )
	{
		$rowset = $this->_db->fetchAll( $select );

		foreach ( $rowset as &$row){
			$row = $this->_decodeProductos( $row );
		}

		return $rowset;
	}
	
	protected function _decodeProductos( $row )
	{
	    
	    
		$row['productosIds'] = explode(",", $row['productos']);
		$row['productosCantidades'] = array_combine( $row['productosIds'], explode(",", $row['cantidades']));
		
		$row['productos'] = $row['productosCantidades'];
		
		return $row;
	}
	
	
}